In addition to the RL task this dataset contains self-reported ‘real-world’ risk behaviors, several impultivity surveys and BART. One question of interest was whether any of the measures predicted the ‘real-world’ risk behaviors. This report looks into that question.

DV: Real-world risk dimensions

Real-world risk was measures using two questionnaires with a total of 63 items. Not all of these had sufficient variance to be useful so we filtered out those that could not be transformed successfully to have skewness <2 and applied hierarchical clustering on the remaining items. This resulted in three factors: Alcohol, smoking, social risk taking.

Here is the list of items that were skewed and could not transformed successfully.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Using transformation:log
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
45 data positively skewed data were transformed:
carepf1
carepf2
carepf3
carepf4
carepf5
carepf6
carepf8
carepf9
carepf10
carepf11
carepf12
carepf13
carepf14
carepf15
carepf16
carepf17
carepf18
carepf19
carepf20
carepf21
carepf22
carepf23
carepf24
carepf25
carepf26
carepf27
carepf28
carepf29
carepf30
duq3
duq6
duq9
duq10
duq17
duq20
duq21
duq22
duq23
duq24
duq25
duq29
duq30
duq31
duq32
duq33
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Dropping 30 positively skewed data that could not be transformed successfully:
carepf1
carepf3
carepf4
carepf10
carepf11
carepf12
carepf14
carepf16
carepf19
carepf21
carepf22
carepf23
carepf24
carepf25
carepf27
carepf29
duq3
duq6
duq9
duq17
duq21
duq22
duq23
duq24
duq25
duq29
duq30
duq31
duq32
duq33
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
No negatively skewed variables found.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Here is the tree structure of the remaining items

library(ggdendro)

try$labels = gsub(".logTr","",try$labels)
try$labels = gsub("_.*","",try$labels)

input_path = '/Users/zeynepenkavi/Dropbox/PoldrackLab/DevStudy_Analyses/input/'
survey_questions = read.csv(paste0(input_path,"survey_questions.csv"))

tmp = data.frame(label=try$labels) %>%
  left_join(survey_questions, by="label")

tmp$question = gsub("\\.", " ", tmp$question)
tmp$question = gsub("^\\d+|\\d+$", "", tmp$question) 
try$labels = tmp$question
# ggdendrogram(try, rotate=TRUE)+
#   theme(panel.border = element_blank())

p = segment(dendro_data(try)) %>%
  mutate(seg_col = ifelse(yend<1.76 & xend < 8, 1, ifelse(yend<1.76 & xend>7 & xend<18, 2, ifelse(yend<1.76 & xend>17 & xend < 22, 3, ifelse(yend<1.76 & xend>21,4,5))))) %>%
  ggplot(aes(x = label))+
  geom_segment(aes(x = x, y = y, xend = xend, yend = yend, col=factor(seg_col)),alpha = 1, size=1.5)+
  theme(panel.border = element_blank(),
        panel.grid = element_blank(), 
        legend.position = "none",
        axis.text.y = element_text(size=14))+
  scale_x_discrete(limits = (label(dendro_data(try))$label))+
  scale_color_manual(values = c(cbbPalette[1:4], "grey"))+
  coord_flip()+
  xlab("")+
  ylab("")

ggsave("Risk_tree.jpeg", device = "jpeg", path = fig_path, width = 12, height = 10, units = "in", dpi = 450)

The code for factorizing the risk items can be found here

The four ‘real-world risk’ factors are distributed as follow

q_data %>%
  select(contains("scores")) %>%
  gather(key, value) %>%
  ggplot(aes(value))+
  geom_histogram()+
  facet_wrap(~key, scales = "free")

IV: All behavioral measures

machine_game_summary = machine_game_data_clean %>%
  group_by(Sub_id, facet_labels) %>%
  summarise(sum_correct = sum(correct1_incorrect0),
            mg_mean_rt = mean(Reaction_time, na.rm=T),
            mg_sd_rt = sd(Reaction_time)) %>%
  gather(key, value, -Sub_id, -facet_labels) %>%
  unite(temp, facet_labels, key) %>%
  spread(temp, value)

all_behavioral_data = machine_game_summary %>%
  left_join(bart_adjusted_pumps %>% select(-age_group), by="Sub_id") %>%
  left_join(q_data %>% rename(Sub_id = id), by="Sub_id") %>%
  ungroup()%>%
  select(-Sub_id)

all_behavioral_data

Calculating relationships between all behavioral measures controlling for age and intelligence

cor_df = data.frame(var1=NA, var2=NA, b_x=NA, p_x=NA, b_age = NA, p_age = NA, b_vocab_raw=NA, p_vocab_raw=NA, b_mr_raw=NA, p_mr_raw=NA)

dvs = names(all_behavioral_data %>% select(-calc_age, -vocab_raw, -mr_raw, -gender))
for(i in 1:(length(dvs)-1)){
  x = all_behavioral_data %>% pull(dvs[i])
  rem_dvs = dvs[-c(1:i)]
  
  for(j in 1:length(rem_dvs)){
    y = all_behavioral_data %>% pull(rem_dvs[j])
    
    m = lm(y ~ x + all_behavioral_data$calc_age+ all_behavioral_data$vocab_raw+ all_behavioral_data$mr_raw)
    
    cor_df = rbind(cor_df, c(var1=dvs[i], 
                             var2=rem_dvs[j], 
                             b_x=coefficients(m)["x"], 
                             p_x= coef(summary(m))["x","Pr(>|t|)"], 
                             b_age=coefficients(m)["all_behavioral_data$calc_age"], 
                             p_age= coef(summary(m))["all_behavioral_data$calc_age","Pr(>|t|)"], 
                          b_vocab_raw=coefficients(m)["all_behavioral_data$vocab_raw"],
                          p_vocab_raw= coef(summary(m))["all_behavioral_data$vocab_raw","Pr(>|t|)"],
                          b_mr_raw=coefficients(m)["all_behavioral_data$mr_raw"],
                          p_mr_raw= coef(summary(m))["all_behavioral_data$mr_raw","Pr(>|t|)"]))
  }
}
rm(dvs, x, y, m, i, j)

All correlations

cor_df = cor_df %>%
  filter(!is.na(var1)) %>%
  mutate(b_x = as.numeric(b_x),
         p_x = as.numeric(p_x),
         b_age = as.numeric(b_age),
         p_age = as.numeric(p_age),
         b_vocab_raw = as.numeric(b_vocab_raw),
         p_vocab_raw = as.numeric(p_vocab_raw),
         b_mr_raw = as.numeric(b_mr_raw),
         p_mr_raw = as.numeric(p_mr_raw))

cor_df %>%
  arrange(p_x) %>%
  datatable() %>%
  formatRound(columns=c('b_x', 'p_x', 'b_age', 'p_age', 'b_vocab_raw', 'p_vocab_raw', 'b_mr_raw', 'p_mr_raw'), digits=3)

All “significant” correlations

cor_df %>%
  filter(p_x<0.05)%>%
  arrange(p_x) %>%
  datatable() %>%
  formatRound(columns=c('b_x', 'p_x', 'b_age', 'p_age', 'b_vocab_raw', 'p_vocab_raw', 'b_mr_raw', 'p_mr_raw'), digits=3)

All “significant” correlations relating to “real-world risky behavior”

cor_df %>%
  filter(p_x<0.05)%>%
  filter(grepl("scores", var1) | grepl("scores", var2)) %>%
  arrange(p_x) %>%
  datatable() %>%
  formatRound(columns=c('b_x', 'p_x', 'b_age', 'p_age', 'b_vocab_raw', 'p_vocab_raw', 'b_mr_raw', 'p_mr_raw'), digits=3)

Significant correlations that survive multiple comparisons

cor_df%>%
  mutate(adj_p_x = p.adjust(p_x, method="fdr"))%>%
  filter(adj_p_x<0.05) %>%
  filter(grepl("scores", var1) | grepl("scores", var2)) %>%
  arrange(adj_p_x) %>%
  datatable() %>%
  formatRound(columns=c('b_x', 'p_x', 'b_age', 'p_age', 'b_vocab_raw', 'p_vocab_raw', 'b_mr_raw', 'p_mr_raw', 'adj_p_x'), digits=3)

Possible relationship between experimental measures and real-world behavior

p = all_behavioral_data %>%
  select(bart_mean_rt, '-5,+495_sum_correct', contains("scores")) %>%
  gather(key, value, -smoking_scores, -alcohol_scores, -rec_scores, -work_scores) %>% 
  gather(score_type, score_value, -key, -value) %>%
  mutate(key = ifelse(key == '-5,+495_sum_correct', 'High var + EV machine total correct', ifelse(key == "bart_mean_rt", "BART Mean RT", NA))) %>%
  ggplot(aes(value, score_value))+
  geom_point()+
  geom_smooth(method="lm")+
  facet_grid(score_type~key, scales="free")+
  ylab("")+
  xlab("")+
  theme(strip.text = element_text(size=14))

ggsave("Risk_cors.jpeg", device = "jpeg", path = fig_path, width = 7, height = 7, units = "in", dpi = 450)

LS0tCnRpdGxlOiAiRGV2ZWxvcG1lbnRhbCBkaWZmZXJlbmNlcyBsZWFybmluZyBmcm9tIGxhcmdlIGxvc3NzZXMiCm91dHB1dDogCmh0bWxfZG9jdW1lbnQ6CnRvYzogdHJ1ZQp0b2NfZGVwdHM6IDIKLS0tCgpJbiBhZGRpdGlvbiB0byB0aGUgUkwgdGFzayB0aGlzIGRhdGFzZXQgY29udGFpbnMgc2VsZi1yZXBvcnRlZCAncmVhbC13b3JsZCcgcmlzayBiZWhhdmlvcnMsIHNldmVyYWwgaW1wdWx0aXZpdHkgc3VydmV5cyBhbmQgQkFSVC4gT25lIHF1ZXN0aW9uIG9mIGludGVyZXN0IHdhcyB3aGV0aGVyIGFueSBvZiB0aGUgbWVhc3VyZXMgcHJlZGljdGVkIHRoZSAncmVhbC13b3JsZCcgcmlzayBiZWhhdmlvcnMuIFRoaXMgcmVwb3J0IGxvb2tzIGludG8gdGhhdCBxdWVzdGlvbi4KCiMjIERWOiBSZWFsLXdvcmxkIHJpc2sgZGltZW5zaW9ucwoKUmVhbC13b3JsZCByaXNrIHdhcyBtZWFzdXJlcyB1c2luZyB0d28gcXVlc3Rpb25uYWlyZXMgd2l0aCBhIHRvdGFsIG9mIDYzIGl0ZW1zLiBOb3QgYWxsIG9mIHRoZXNlIGhhZCBzdWZmaWNpZW50IHZhcmlhbmNlIHRvIGJlIHVzZWZ1bCBzbyB3ZSBmaWx0ZXJlZCBvdXQgdGhvc2UgdGhhdCBjb3VsZCBub3QgYmUgdHJhbnNmb3JtZWQgc3VjY2Vzc2Z1bGx5IHRvIGhhdmUgc2tld25lc3MgPDIgYW5kIGFwcGxpZWQgaGllcmFyY2hpY2FsIGNsdXN0ZXJpbmcgb24gdGhlIHJlbWFpbmluZyBpdGVtcy4gVGhpcyByZXN1bHRlZCBpbiB0aHJlZSBmYWN0b3JzOiBBbGNvaG9sLCBzbW9raW5nLCBzb2NpYWwgcmlzayB0YWtpbmcuCgpIZXJlIGlzIHRoZSBsaXN0IG9mIGl0ZW1zIHRoYXQgd2VyZSBza2V3ZWQgYW5kIGNvdWxkIG5vdCB0cmFuc2Zvcm1lZCBzdWNjZXNzZnVsbHkuCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzb3VyY2UoJy9Vc2Vycy96ZXluZXBlbmthdmkvRHJvcGJveC9Qb2xkcmFja0xhYi9EZXZTdHVkeV9BbmFseXNlcy9jb2RlL3dvcmtzcGFjZV9zY3JpcHRzL0RldlN0dWR5X3dvcmtzcGFjZS5SJykKYGBgCgpIZXJlIGlzIHRoZSB0cmVlIHN0cnVjdHVyZSBvZiB0aGUgcmVtYWluaW5nIGl0ZW1zCgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KGdnZGVuZHJvKQoKdHJ5JGxhYmVscyA9IGdzdWIoIi5sb2dUciIsIiIsdHJ5JGxhYmVscykKdHJ5JGxhYmVscyA9IGdzdWIoIl8uKiIsIiIsdHJ5JGxhYmVscykKCmlucHV0X3BhdGggPSAnL1VzZXJzL3pleW5lcGVua2F2aS9Ecm9wYm94L1BvbGRyYWNrTGFiL0RldlN0dWR5X0FuYWx5c2VzL2lucHV0LycKc3VydmV5X3F1ZXN0aW9ucyA9IHJlYWQuY3N2KHBhc3RlMChpbnB1dF9wYXRoLCJzdXJ2ZXlfcXVlc3Rpb25zLmNzdiIpKQoKdG1wID0gZGF0YS5mcmFtZShsYWJlbD10cnkkbGFiZWxzKSAlPiUKICBsZWZ0X2pvaW4oc3VydmV5X3F1ZXN0aW9ucywgYnk9ImxhYmVsIikKCnRtcCRxdWVzdGlvbiA9IGdzdWIoIlxcLiIsICIgIiwgdG1wJHF1ZXN0aW9uKQp0bXAkcXVlc3Rpb24gPSBnc3ViKCJeXFxkK3xcXGQrJCIsICIiLCB0bXAkcXVlc3Rpb24pIAp0cnkkbGFiZWxzID0gdG1wJHF1ZXN0aW9uCmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBnZ2RlbmRyb2dyYW0odHJ5LCByb3RhdGU9VFJVRSkrCiMgICB0aGVtZShwYW5lbC5ib3JkZXIgPSBlbGVtZW50X2JsYW5rKCkpCgpwID0gc2VnbWVudChkZW5kcm9fZGF0YSh0cnkpKSAlPiUKICBtdXRhdGUoc2VnX2NvbCA9IGlmZWxzZSh5ZW5kPDEuNzYgJiB4ZW5kIDwgOCwgMSwgaWZlbHNlKHllbmQ8MS43NiAmIHhlbmQ+NyAmIHhlbmQ8MTgsIDIsIGlmZWxzZSh5ZW5kPDEuNzYgJiB4ZW5kPjE3ICYgeGVuZCA8IDIyLCAzLCBpZmVsc2UoeWVuZDwxLjc2ICYgeGVuZD4yMSw0LDUpKSkpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBsYWJlbCkpKwogIGdlb21fc2VnbWVudChhZXMoeCA9IHgsIHkgPSB5LCB4ZW5kID0geGVuZCwgeWVuZCA9IHllbmQsIGNvbD1mYWN0b3Ioc2VnX2NvbCkpLGFscGhhID0gMSwgc2l6ZT0xLjUpKwogIHRoZW1lKHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpLCAKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT0xNCkpKwogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gKGxhYmVsKGRlbmRyb19kYXRhKHRyeSkpJGxhYmVsKSkrCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoY2JiUGFsZXR0ZVsxOjRdLCAiZ3JleSIpKSsKICBjb29yZF9mbGlwKCkrCiAgeGxhYigiIikrCiAgeWxhYigiIikKCmdnc2F2ZSgiUmlza190cmVlLmpwZWciLCBkZXZpY2UgPSAianBlZyIsIHBhdGggPSBmaWdfcGF0aCwgd2lkdGggPSAxMiwgaGVpZ2h0ID0gMTAsIHVuaXRzID0gImluIiwgZHBpID0gNDUwKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIG91dC53aWR0aD0nMTAwJSd9CmZpZ19uYW1lID0gJ1Jpc2tfdHJlZS5qcGVnJwoKa25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MocGFzdGUwKGZpZ19wYXRoLCBmaWdfbmFtZSkpCmBgYAoKVGhlIGNvZGUgZm9yIGZhY3Rvcml6aW5nIHRoZSByaXNrIGl0ZW1zIGNhbiBiZSBmb3VuZCBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL3plbmthdmkvRGV2U3R1ZHlfQW5hbHlzZXMvYmxvYi9tYXN0ZXIvY29kZS93b3Jrc3BhY2Vfc2NyaXB0cy9xdWVzdGlvbm5haXJlX2RhdGEuUikKClRoZSBmb3VyICdyZWFsLXdvcmxkIHJpc2snIGZhY3RvcnMgYXJlIGRpc3RyaWJ1dGVkIGFzIGZvbGxvdwoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KcV9kYXRhICU+JQogIHNlbGVjdChjb250YWlucygic2NvcmVzIikpICU+JQogIGdhdGhlcihrZXksIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHZhbHVlKSkrCiAgZ2VvbV9oaXN0b2dyYW0oKSsKICBmYWNldF93cmFwKH5rZXksIHNjYWxlcyA9ICJmcmVlIikKYGBgCgojIyBJVjogQWxsIGJlaGF2aW9yYWwgbWVhc3VyZXMKCmBgYHtyfQptYWNoaW5lX2dhbWVfc3VtbWFyeSA9IG1hY2hpbmVfZ2FtZV9kYXRhX2NsZWFuICU+JQogIGdyb3VwX2J5KFN1Yl9pZCwgZmFjZXRfbGFiZWxzKSAlPiUKICBzdW1tYXJpc2Uoc3VtX2NvcnJlY3QgPSBzdW0oY29ycmVjdDFfaW5jb3JyZWN0MCksCiAgICAgICAgICAgIG1nX21lYW5fcnQgPSBtZWFuKFJlYWN0aW9uX3RpbWUsIG5hLnJtPVQpLAogICAgICAgICAgICBtZ19zZF9ydCA9IHNkKFJlYWN0aW9uX3RpbWUpKSAlPiUKICBnYXRoZXIoa2V5LCB2YWx1ZSwgLVN1Yl9pZCwgLWZhY2V0X2xhYmVscykgJT4lCiAgdW5pdGUodGVtcCwgZmFjZXRfbGFiZWxzLCBrZXkpICU+JQogIHNwcmVhZCh0ZW1wLCB2YWx1ZSkKCmFsbF9iZWhhdmlvcmFsX2RhdGEgPSBtYWNoaW5lX2dhbWVfc3VtbWFyeSAlPiUKICBsZWZ0X2pvaW4oYmFydF9hZGp1c3RlZF9wdW1wcyAlPiUgc2VsZWN0KC1hZ2VfZ3JvdXApLCBieT0iU3ViX2lkIikgJT4lCiAgbGVmdF9qb2luKHFfZGF0YSAlPiUgcmVuYW1lKFN1Yl9pZCA9IGlkKSwgYnk9IlN1Yl9pZCIpICU+JQogIHVuZ3JvdXAoKSU+JQogIHNlbGVjdCgtU3ViX2lkKQoKYWxsX2JlaGF2aW9yYWxfZGF0YQpgYGAKCkNhbGN1bGF0aW5nIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbGwgYmVoYXZpb3JhbCBtZWFzdXJlcyBjb250cm9sbGluZyBmb3IgYWdlIGFuZCBpbnRlbGxpZ2VuY2UKCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CmNvcl9kZiA9IGRhdGEuZnJhbWUodmFyMT1OQSwgdmFyMj1OQSwgYl94PU5BLCBwX3g9TkEsIGJfYWdlID0gTkEsIHBfYWdlID0gTkEsIGJfdm9jYWJfcmF3PU5BLCBwX3ZvY2FiX3Jhdz1OQSwgYl9tcl9yYXc9TkEsIHBfbXJfcmF3PU5BKQoKZHZzID0gbmFtZXMoYWxsX2JlaGF2aW9yYWxfZGF0YSAlPiUgc2VsZWN0KC1jYWxjX2FnZSwgLXZvY2FiX3JhdywgLW1yX3JhdywgLWdlbmRlcikpCmZvcihpIGluIDE6KGxlbmd0aChkdnMpLTEpKXsKICB4ID0gYWxsX2JlaGF2aW9yYWxfZGF0YSAlPiUgcHVsbChkdnNbaV0pCiAgcmVtX2R2cyA9IGR2c1stYygxOmkpXQogIAogIGZvcihqIGluIDE6bGVuZ3RoKHJlbV9kdnMpKXsKICAgIHkgPSBhbGxfYmVoYXZpb3JhbF9kYXRhICU+JSBwdWxsKHJlbV9kdnNbal0pCiAgICAKICAgIG0gPSBsbSh5IH4geCArIGFsbF9iZWhhdmlvcmFsX2RhdGEkY2FsY19hZ2UrIGFsbF9iZWhhdmlvcmFsX2RhdGEkdm9jYWJfcmF3KyBhbGxfYmVoYXZpb3JhbF9kYXRhJG1yX3JhdykKICAgIAogICAgY29yX2RmID0gcmJpbmQoY29yX2RmLCBjKHZhcjE9ZHZzW2ldLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIyPXJlbV9kdnNbal0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJfeD1jb2VmZmljaWVudHMobSlbIngiXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcF94PSBjb2VmKHN1bW1hcnkobSkpWyJ4IiwiUHIoPnx0fCkiXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYl9hZ2U9Y29lZmZpY2llbnRzKG0pWyJhbGxfYmVoYXZpb3JhbF9kYXRhJGNhbGNfYWdlIl0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYWdlPSBjb2VmKHN1bW1hcnkobSkpWyJhbGxfYmVoYXZpb3JhbF9kYXRhJGNhbGNfYWdlIiwiUHIoPnx0fCkiXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgYl92b2NhYl9yYXc9Y29lZmZpY2llbnRzKG0pWyJhbGxfYmVoYXZpb3JhbF9kYXRhJHZvY2FiX3JhdyJdLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBfdm9jYWJfcmF3PSBjb2VmKHN1bW1hcnkobSkpWyJhbGxfYmVoYXZpb3JhbF9kYXRhJHZvY2FiX3JhdyIsIlByKD58dHwpIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYl9tcl9yYXc9Y29lZmZpY2llbnRzKG0pWyJhbGxfYmVoYXZpb3JhbF9kYXRhJG1yX3JhdyJdLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBfbXJfcmF3PSBjb2VmKHN1bW1hcnkobSkpWyJhbGxfYmVoYXZpb3JhbF9kYXRhJG1yX3JhdyIsIlByKD58dHwpIl0pKQogIH0KfQpybShkdnMsIHgsIHksIG0sIGksIGopCmBgYAoKIyMgQWxsIGNvcnJlbGF0aW9ucwoKYGBge3J9CmNvcl9kZiA9IGNvcl9kZiAlPiUKICBmaWx0ZXIoIWlzLm5hKHZhcjEpKSAlPiUKICBtdXRhdGUoYl94ID0gYXMubnVtZXJpYyhiX3gpLAogICAgICAgICBwX3ggPSBhcy5udW1lcmljKHBfeCksCiAgICAgICAgIGJfYWdlID0gYXMubnVtZXJpYyhiX2FnZSksCiAgICAgICAgIHBfYWdlID0gYXMubnVtZXJpYyhwX2FnZSksCiAgICAgICAgIGJfdm9jYWJfcmF3ID0gYXMubnVtZXJpYyhiX3ZvY2FiX3JhdyksCiAgICAgICAgIHBfdm9jYWJfcmF3ID0gYXMubnVtZXJpYyhwX3ZvY2FiX3JhdyksCiAgICAgICAgIGJfbXJfcmF3ID0gYXMubnVtZXJpYyhiX21yX3JhdyksCiAgICAgICAgIHBfbXJfcmF3ID0gYXMubnVtZXJpYyhwX21yX3JhdykpCgpjb3JfZGYgJT4lCiAgYXJyYW5nZShwX3gpICU+JQogIGRhdGF0YWJsZSgpICU+JQogIGZvcm1hdFJvdW5kKGNvbHVtbnM9YygnYl94JywgJ3BfeCcsICdiX2FnZScsICdwX2FnZScsICdiX3ZvY2FiX3JhdycsICdwX3ZvY2FiX3JhdycsICdiX21yX3JhdycsICdwX21yX3JhdycpLCBkaWdpdHM9MykKYGBgCgojIyMgQWxsICJzaWduaWZpY2FudCIgY29ycmVsYXRpb25zCgpgYGB7cn0KY29yX2RmICU+JQogIGZpbHRlcihwX3g8MC4wNSklPiUKICBhcnJhbmdlKHBfeCkgJT4lCiAgZGF0YXRhYmxlKCkgJT4lCiAgZm9ybWF0Um91bmQoY29sdW1ucz1jKCdiX3gnLCAncF94JywgJ2JfYWdlJywgJ3BfYWdlJywgJ2Jfdm9jYWJfcmF3JywgJ3Bfdm9jYWJfcmF3JywgJ2JfbXJfcmF3JywgJ3BfbXJfcmF3JyksIGRpZ2l0cz0zKQpgYGAKCiMjIyBBbGwgInNpZ25pZmljYW50IiBjb3JyZWxhdGlvbnMgcmVsYXRpbmcgdG8gInJlYWwtd29ybGQgcmlza3kgYmVoYXZpb3IiCgpgYGB7cn0KY29yX2RmICU+JQogIGZpbHRlcihwX3g8MC4wNSklPiUKICBmaWx0ZXIoZ3JlcGwoInNjb3JlcyIsIHZhcjEpIHwgZ3JlcGwoInNjb3JlcyIsIHZhcjIpKSAlPiUKICBhcnJhbmdlKHBfeCkgJT4lCiAgZGF0YXRhYmxlKCkgJT4lCiAgZm9ybWF0Um91bmQoY29sdW1ucz1jKCdiX3gnLCAncF94JywgJ2JfYWdlJywgJ3BfYWdlJywgJ2Jfdm9jYWJfcmF3JywgJ3Bfdm9jYWJfcmF3JywgJ2JfbXJfcmF3JywgJ3BfbXJfcmF3JyksIGRpZ2l0cz0zKQpgYGAKCiMjIyBTaWduaWZpY2FudCBjb3JyZWxhdGlvbnMgdGhhdCBzdXJ2aXZlIG11bHRpcGxlIGNvbXBhcmlzb25zCgpgYGB7cn0KY29yX2RmJT4lCiAgbXV0YXRlKGFkal9wX3ggPSBwLmFkanVzdChwX3gsIG1ldGhvZD0iZmRyIikpJT4lCiAgZmlsdGVyKGFkal9wX3g8MC4wNSkgJT4lCiAgZmlsdGVyKGdyZXBsKCJzY29yZXMiLCB2YXIxKSB8IGdyZXBsKCJzY29yZXMiLCB2YXIyKSkgJT4lCiAgYXJyYW5nZShhZGpfcF94KSAlPiUKICBkYXRhdGFibGUoKSAlPiUKICBmb3JtYXRSb3VuZChjb2x1bW5zPWMoJ2JfeCcsICdwX3gnLCAnYl9hZ2UnLCAncF9hZ2UnLCAnYl92b2NhYl9yYXcnLCAncF92b2NhYl9yYXcnLCAnYl9tcl9yYXcnLCAncF9tcl9yYXcnLCAnYWRqX3BfeCcpLCBkaWdpdHM9MykKYGBgCgojIyMgUG9zc2libGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZXhwZXJpbWVudGFsIG1lYXN1cmVzIGFuZCByZWFsLXdvcmxkIGJlaGF2aW9yCgpgYGB7ciB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpwID0gYWxsX2JlaGF2aW9yYWxfZGF0YSAlPiUKICBzZWxlY3QoYmFydF9tZWFuX3J0LCAnLTUsKzQ5NV9zdW1fY29ycmVjdCcsIGNvbnRhaW5zKCJzY29yZXMiKSkgJT4lCiAgZ2F0aGVyKGtleSwgdmFsdWUsIC1zbW9raW5nX3Njb3JlcywgLWFsY29ob2xfc2NvcmVzLCAtcmVjX3Njb3JlcywgLXdvcmtfc2NvcmVzKSAlPiUgCiAgZ2F0aGVyKHNjb3JlX3R5cGUsIHNjb3JlX3ZhbHVlLCAta2V5LCAtdmFsdWUpICU+JQogIG11dGF0ZShrZXkgPSBpZmVsc2Uoa2V5ID09ICctNSwrNDk1X3N1bV9jb3JyZWN0JywgJ0hpZ2ggdmFyICsgRVYgbWFjaGluZSB0b3RhbCBjb3JyZWN0JywgaWZlbHNlKGtleSA9PSAiYmFydF9tZWFuX3J0IiwgIkJBUlQgTWVhbiBSVCIsIE5BKSkpICU+JQogIGdncGxvdChhZXModmFsdWUsIHNjb3JlX3ZhbHVlKSkrCiAgZ2VvbV9wb2ludCgpKwogIGdlb21fc21vb3RoKG1ldGhvZD0ibG0iKSsKICBmYWNldF9ncmlkKHNjb3JlX3R5cGV+a2V5LCBzY2FsZXM9ImZyZWUiKSsKICB5bGFiKCIiKSsKICB4bGFiKCIiKSsKICB0aGVtZShzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTQpKQoKZ2dzYXZlKCJSaXNrX2NvcnMuanBlZyIsIGRldmljZSA9ICJqcGVnIiwgcGF0aCA9IGZpZ19wYXRoLCB3aWR0aCA9IDcsIGhlaWdodCA9IDcsIHVuaXRzID0gImluIiwgZHBpID0gNDUwKQoKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBvdXQud2lkdGg9JzEwMCUnfQpmaWdfbmFtZSA9ICdSaXNrX2NvcnMuanBlZycKCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKHBhc3RlMChmaWdfcGF0aCwgZmlnX25hbWUpKQpgYGA=